Management systems are typically used to monitor functioning of various applications in a network and to provide diagnostic services when an application does not operate properly In extreme cases, the application may have to be reset to factory defaults and restarted in order to properly recover from a failure; however, in certain cases, various applications may have to be provided with appropriate instrumentation to make them compatible with the management systems. In this context, instrumentation refers to additional code which is not part of that application's primary function, but is a part of management and maintenance surface.
Most applications expose secondary functionality of enabling diagnostic and monitoring techniques in an inconsistent manner. This may be because the secondary functionality requires the applications to interface with well-known management systems. Since the management systems can vary from vendor to vendor and product to product, application developers typically do not know which interfaces to implement when producing new software.
In many situations, application developers write a separate code called a “provider” for every application that interfaces with management systems to enable the applications to work with the management systems through an instrumentation application. A downside is that the technologies which enable an application to work application to work with a management system are rather complex and the need to provide an arbitrary interface makes the task of coding (i.e., providing for) a “provider” more complicated.